package com.example;

import com.mybatisflex.codegen.Generator;
import com.mybatisflex.codegen.config.ColumnConfig;
import com.mybatisflex.codegen.config.GlobalConfig;
import com.zaxxer.hikari.HikariDataSource;

import java.util.ArrayList;
import java.util.List;

/**
 * @author CYH
 * @date 2025/02/10 11:08
 */
public class MybatisFlexCodegen {

    final static String PACKAGE_NAME = "indi.cyh";
    final static int JDK_VERSION = 8;

    public static void main(String[] args) {
        //配置数据源
        HikariDataSource dataSource = new HikariDataSource();
        dataSource.setJdbcUrl("jdbc:mysql://mysql.sqlpub.com:3306/sql_pub?characterEncoding=utf-8");
        dataSource.setUsername("sql_pub");
        dataSource.setPassword("Hok2MmTLizbOXta5");

        List<String> tables = new ArrayList<>();


        //创建配置内容，两种风格都可以。
        GlobalConfig globalConfig = createGlobalConfigUseStyle(tables);

        //通过 datasource 和 globalConfig 创建代码生成器
        Generator generator = new Generator(dataSource, globalConfig);

        //生成代码
        generator.generate();
    }


    public static GlobalConfig createGlobalConfigUseStyle(List<String> tables) {
        //创建配置内容
        GlobalConfig globalConfig = new GlobalConfig();

        //设置根包
        globalConfig.setBasePackage(PACKAGE_NAME);

        //设置表前缀和只生成哪些表
//        globalConfig.setTablePrefix("tb_");
        for (String table : tables) {
            globalConfig.setGenerateTable(table);
        }


        //设置生成 entity 并启用 Lombok
        globalConfig.setEntityGenerateEnable(true);
        globalConfig.setEntityWithLombok(true);
        //设置项目的JDK版本，项目的JDK为14及以上时建议设置该项，小于14则可以不设置
        globalConfig.setEntityJdkVersion(JDK_VERSION);

        //设置生成 mapper
        globalConfig.setMapperGenerateEnable(true);
        globalConfig.getMapperConfig().setMapperAnnotation(true);
        //可以单独配置某个列
//        ColumnConfig columnConfig = new ColumnConfig();
//        columnConfig.setColumnName("tenant_id");
//        columnConfig.setLarge(true);
//        columnConfig.setVersion(true);
//        globalConfig.setColumnConfig("tb_account", columnConfig);

        globalConfig.setServiceImplGenerateEnable(true);

        globalConfig.setServiceGenerateEnable(true);

        globalConfig.setControllerGenerateEnable(true);

        return globalConfig;
    }
}
